Booting or bootstrapping is the process of starting up a computing device from a halted or powered-down condition and loading an operating system into system memory of the computing device. A computing device may be booted from a local source, for example, a hard disk that is part of the computing device, or from a remote source, for example, network storage as in a network boot.
One network booting technique that allows computing devices to boot and run from network storage is referred to as image-based network booting. In an image-based network boot, when the computing device is powered on, the computing device downloads an image of the operating system from the network storage using protocols like PXE/TFTP/BOOTP. The computing device then extracts the operating system from the image and loads the operating system into system memory for execution.
The benefits of network booting include central management and storage of an operating system and files of the operating system. If an anti-virus scanning of operating system files is needed, the scanning is carried out just once. They also permit computers to operate without local disks and provide an administrator control over what operating system files to make available to users. Further, they allow for easy swap-outs of defective computing devices since a replacement computing device may simply be configured to download and subsequently execute the same operating system image that the defective computing device was configured to download.
Despite the foregoing benefits, these well-known technologies continue to suffer from a variety of problems. Consider, for example, a computer system that includes a single central storage server and a number of computing devices connected thereto, where unbooted computing devices are configured to download boot images from the central storage server. In this example, the central storage server represents a single point of failure. Another problem arises during situations where the unbooted computing devices attempt to download a boot image from the central storage server substantially at the same time. This may occur, for example, after a power-outage that causes all of the computing devices to shut down and attempt a reboot.
One attempt to mitigate the foregoing problems involves implementing a caching proxy that is logically disposed between the computing devices and the central storage server. In particular, the caching proxy monitors the transfer of boot images between the unbooted computing devices and the central storage server and stores copies of the transferred boot images. In this way, subsequent requests made by the unbooted computing devices for boot images on the central storage server can be intercepted and served by the caching proxy instead of the central storage server. Hence, utilization of cache proxies may help reduce the average load imposed on the central storage server. Unfortunately, computer systems that implement cache proxies still suffer from some of the same problems described above. Consider, for example, a single caching proxy that has cached only a subset of the boot images that are available on the central storage manager. In the event of a failure of the central storage manager, any unbooted computing devices that require boot images that are not stored at the caching proxy are unable to execute a boot. Moreover, cache proxies are high in complexity and cost, which severely degrades potential scalability of computer systems that employ a large number of computing devices.